package com.campus.lostandfound.service;

import com.campus.lostandfound.entity.Permission;
import com.campus.lostandfound.entity.Role;
import com.campus.lostandfound.entity.User;

import java.util.List;

/**
 * 管理员服务接口
 */
public interface AdminService {
    
    // ==================== 用户管理 ====================
    
    /**
     * 获取所有用户列表
     */
    List<User> getAllUsers();
    
    /**
     * 启用用户
     */
    boolean enableUser(Long userId);
    
    /**
     * 禁用用户
     */
    boolean disableUser(Long userId);
    
    /**
     * 删除用户(谨慎使用)
     */
    boolean deleteUser(Long userId);
    
    /**
     * 为用户分配角色
     */
    boolean assignRoleToUser(Long userId, Long roleId);
    
    /**
     * 移除用户角色
     */
    boolean removeUserRole(Long userId, Long roleId);
    
    /**
     * 获取用户的所有角色
     */
    List<Role> getUserRoles(Long userId);
    
    /**
     * 获取用户的所有权限
     */
    List<Permission> getUserPermissions(Long userId);
    
    // ==================== 角色管理 ====================
    
    /**
     * 获取所有角色列表
     */
    List<Role> getAllRoles();
    
    /**
     * 添加角色
     */
    boolean addRole(Role role);
    
    /**
     * 删除角色
     */
    boolean deleteRole(Long roleId);
    
    /**
     * 更新角色
     */
    boolean updateRole(Role role);
    
    /**
     * 为角色分配权限
     */
    boolean assignPermissionToRole(Long roleId, Long permissionId);
    
    /**
     * 移除角色权限
     */
    boolean removeRolePermission(Long roleId, Long permissionId);
    
    /**
     * 获取角色的所有权限
     */
    List<Permission> getRolePermissions(Long roleId);
    
    // ==================== 权限管理 ====================
    
    /**
     * 获取所有权限列表
     */
    List<Permission> getAllPermissions();
    
    /**
     * 添加权限
     */
    boolean addPermission(Permission permission);
    
    /**
     * 删除权限
     */
    boolean deletePermission(Long permissionId);
    
    /**
     * 更新权限
     */
    boolean updatePermission(Permission permission);
    
    // ==================== 权限检查 ====================
    
    /**
     * 检查用户是否为超级管理员
     */
    boolean isSuperAdmin(Long userId);
    
    /**
     * 检查用户是否有指定权限
     */
    boolean hasPermission(Long userId, String permissionCode);
}

